graph TB
    %% 服务端子图
    subgraph Server["🖥️ 服务端 (ChatRoomServer)"]
        subgraph ServerApp["应用程序层"]
            SA["CChatRoomServerApp<br/>📱应用程序主类<br/>━━━━━━━━━━━<br/>🔧 成员函数:<br/>+ InitInstance(): BOOL<br/>+ ExitInstance(): int"]
        end
        
        subgraph ServerUI["用户界面层"]
            SD["CChatRoomServerDlg<br/>🎛️主对话框类<br/>━━━━━━━━━━━<br/>🗂️ 成员变量:<br/>- m_serverSocket: CServerSocket<br/>- m_clientSockets: map&lt;int, CClientSocketEx*&gt;<br/>- m_users: map&lt;int, UserInfo&gt;<br/>- m_nextUserID: int<br/>- m_bServerRunning: bool<br/>- m_editLog: CEdit<br/>- m_listUsers: CListCtrl<br/>━━━━━━━━━━━<br/>🔧 成员函数:<br/>+ OnSocketAccept(): LRESULT<br/>+ OnSocketReceive(): LRESULT<br/>+ OnSocketClose(): LRESULT<br/>+ ProcessMessage(): void<br/>+ BroadcastMessage(): void<br/>+ SendToUser(): void<br/>+ AddLogMessage(): void<br/>+ UpdateUserList(): void<br/>+ RemoveUser(): void"]
        end
        
        subgraph ServerNetwork["网络通信层"]
            SS["CServerSocket<br/>🎧监听Socket<br/>━━━━━━━━━━━<br/>🗂️ 成员变量:<br/>- m_pParent: CChatRoomServerDlg*<br/>━━━━━━━━━━━<br/>🔧 成员函数:<br/>+ OnAccept(nErrorCode): void<br/>+ SetParent(pParent): void"]
            CS1["CClientSocketEx<br/>📡客户端Socket1<br/>━━━━━━━━━━━<br/>🗂️ 成员变量:<br/>- m_pParent: CChatRoomServerDlg*<br/>- m_userID: int<br/>━━━━━━━━━━━<br/>🔧 成员函数:<br/>+ OnReceive(nErrorCode): void<br/>+ OnClose(nErrorCode): void<br/>+ SetUserID(userID): void<br/>+ GetUserID(): int"]
            CS2["CClientSocketEx<br/>📡客户端Socket2<br/>━━━━━━━━━━━<br/>🗂️ 成员变量:<br/>- m_pParent: CChatRoomServerDlg*<br/>- m_userID: int<br/>━━━━━━━━━━━<br/>🔧 成员函数:<br/>+ OnReceive(nErrorCode): void<br/>+ OnClose(nErrorCode): void<br/>+ SetUserID(userID): void<br/>+ GetUserID(): int"]
            CS3["CClientSocketEx<br/>📡客户端Socket3<br/>━━━━━━━━━━━<br/>🗂️ 成员变量:<br/>- m_pParent: CChatRoomServerDlg*<br/>- m_userID: int<br/>━━━━━━━━━━━<br/>🔧 成员函数:<br/>+ OnReceive(nErrorCode): void<br/>+ OnClose(nErrorCode): void<br/>+ SetUserID(userID): void<br/>+ GetUserID(): int"]
        end
        
        subgraph ServerData["数据管理层"]
            UI["UserInfo<br/>👥用户信息结构<br/>━━━━━━━━━━━<br/>🗂️ 成员变量:<br/>+ nickname: CString<br/>+ ip: CString<br/>+ port: UINT<br/>+ socket: CClientSocketEx*"]
            CM1["ChatMessage<br/>💬消息结构<br/>━━━━━━━━━━━<br/>🗂️ 成员变量:<br/>+ type: int<br/>+ sender: char[256]<br/>+ receiver: char[256]<br/>+ content: char[1024]<br/>+ timestamp: char[64]"]
        end
    end
    
    %% 客户端子图
    subgraph Client["💻 客户端 (ChatRoomClient)"]
        subgraph ClientApp["应用程序层"]
            CA["CChatRoomClientApp<br/>📱应用程序主类<br/>━━━━━━━━━━━<br/>🔧 成员函数:<br/>+ InitInstance(): BOOL<br/>+ ExitInstance(): int"]
        end
        
        subgraph ClientUI["用户界面层"]
            CD["CChatRoomClientDlg<br/>🎛️主对话框类<br/>━━━━━━━━━━━<br/>🗂️ 成员变量:<br/>- m_clientSocket: CClientSocket<br/>- m_chatHistory: vector&lt;ChatRecord&gt;<br/>- m_nickname: CString<br/>- m_bConnected: bool<br/>- m_currentPage: int<br/>- m_recordsPerPage: int<br/>- m_editServerIP: CEdit<br/>- m_editMessage: CEdit<br/>- m_editChatDisplay: CEdit<br/>━━━━━━━━━━━<br/>🔧 成员函数:<br/>+ OnSocketConnect(): LRESULT<br/>+ OnSocketReceive(): LRESULT<br/>+ OnSocketClose(): LRESULT<br/>+ OnBnClickedConnect(): void<br/>+ OnBnClickedSendPublic(): void<br/>+ OnBnClickedSendPrivate(): void<br/>+ UpdateConnectionStatus(): void<br/>+ AddChatRecord(): void<br/>+ DisplayChatHistory(): void<br/>+ SendChatMessage(): void<br/>+ SaveChatToFile(): void"]
        end
        
        subgraph ClientNetwork["网络通信层"]
            CSK["CClientSocket<br/>📡客户端Socket<br/>━━━━━━━━━━━<br/>🗂️ 成员变量:<br/>- m_pParent: CChatRoomClientDlg*<br/>━━━━━━━━━━━<br/>🔧 成员函数:<br/>+ OnConnect(nErrorCode): void<br/>+ OnReceive(nErrorCode): void<br/>+ OnClose(nErrorCode): void<br/>+ SetParent(pParent): void"]
        end
        
        subgraph ClientData["数据管理层"]
            CR["ChatRecord<br/>📚聊天记录结构<br/>━━━━━━━━━━━<br/>🗂️ 成员变量:<br/>+ sender: CString<br/>+ content: CString<br/>+ timestamp: CString<br/>+ isPrivate: bool<br/>+ receiver: CString"]
            CM2["ChatMessage<br/>💬消息结构<br/>━━━━━━━━━━━<br/>🗂️ 成员变量:<br/>+ type: int<br/>+ sender: char[256]<br/>+ receiver: char[256]<br/>+ content: char[1024]<br/>+ timestamp: char[64]"]
        end
    end
    
    %% 消息驱动关系 - 服务端
    SS -.->|"📨 WM_SOCKET_ACCEPT<br/>PostMessage()"| SD
    CS1 -.->|"📨 WM_SOCKET_RECEIVE<br/>📨 WM_SOCKET_CLOSE<br/>PostMessage(userID)"| SD
    CS2 -.->|"📨 WM_SOCKET_RECEIVE<br/>📨 WM_SOCKET_CLOSE<br/>PostMessage(userID)"| SD
    CS3 -.->|"📨 WM_SOCKET_RECEIVE<br/>📨 WM_SOCKET_CLOSE<br/>PostMessage(userID)"| SD
    
    %% 消息驱动关系 - 客户端
    CSK -.->|"📨 WM_SOCKET_CONNECT<br/>📨 WM_SOCKET_RECEIVE<br/>📨 WM_SOCKET_CLOSE<br/>PostMessage()"| CD
    
    %% 控制关系
    SA -->|"创建管理"| SD
    CA -->|"创建管理"| CD
    SD -->|"包含控制"| SS
    SD -->|"动态创建"| CS1
    SD -->|"动态创建"| CS2
    SD -->|"动态创建"| CS3
    CD -->|"包含控制"| CSK
    
    %% 数据关系
    SD -->|"存储管理"| UI
    SD -.->|"处理解析"| CM1
    CD -->|"存储管理"| CR
    CD -.->|"处理解析"| CM2
    UI -->|"引用"| CS1
    
    %% 网络通信
    SS <-->|"🌐 TCP监听"| CSK
    CS1 <-->|"🌐 TCP数据传输"| CSK
    CS2 <-->|"🌐 TCP数据传输"| CSK
    CS3 <-->|"🌐 TCP数据传输"| CSK
    
    %% UI事件消息
    SD -.->|"🖱️ UI事件消息<br/>ON_BN_CLICKED<br/>ON_MESSAGE"| SD
    CD -.->|"🖱️ UI事件消息<br/>ON_BN_CLICKED<br/>ON_MESSAGE"| CD
    
    %% 样式定义
    classDef serverClass fill:#e8f4fd,stroke:#1976d2,stroke-width:2px
    classDef clientClass fill:#e8f5e8,stroke:#388e3c,stroke-width:2px
    classDef networkClass fill:#fff3e0,stroke:#f57c00,stroke-width:2px
    classDef dataClass fill:#fce4ec,stroke:#c2185b,stroke-width:2px
    classDef messageFlow stroke:#d32f2f,stroke-width:3px,stroke-dasharray: 5 5
    
    %% 应用样式
    class SA,SD serverClass
    class CA,CD clientClass
    class SS,CS1,CS2,CS3,CSK networkClass
    class UI,CM1,CR,CM2 dataClass